package dao

import (
	"ginApi/db"
	"ginApi/model"
)

type TokenDao struct{}

func NewTokenDao() *TokenDao {
	return &TokenDao{}
}

func (d *TokenDao) InsertToken(token string, userId uint, userType int) (t *model.Token) {
	data := &model.Token{Token: token, UserId: userId, UserType: userType, Status: model.TokenStatusValid}
	if err := db.DB.Create(data).Error; err != nil {
		return nil
	} else {
		return data
	}
}

func (d *TokenDao) FindByToken(token string) (t *model.Token) {
	var entity model.Token
	db.DB.Where("token = ? and status = ?", token, model.TokenStatusValid).First(&entity)

	if entity.ID <= 0 {
		return nil
	}

	return &entity
}

func (d *TokenDao) FindByUserId(userId uint) (t *model.Token) {
	var entity model.Token
	db.DB.Where("user_id = ? and status = ?", userId, model.TokenStatusValid).First(&entity)

	if entity.ID <= 0 {
		return nil
	}

	return &entity
}

func (d *TokenDao) DeleteToken(token string) {
	db.DB.Delete(model.Token{}, "token = ? and status = ?", token, model.TokenStatusValid)
}
